using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;


namespace EcoEstadisticas
{
    class NbixCalculator
    {

        public bool CalculaNbiUno(int codusu, int hogar,float IIUno)
        {
            String personasDelHogar = "SELECT CODUSU,NRO_HOGAR FROM IND WHERE CODUSU=@CODUSU AND NRO_HOGAR=@HOGAR";
            SqlCommand queryInd = new SqlCommand(personasDelHogar, ConeccionBD.getInstance().getConneccion());
            queryInd.Parameters.Add("@CODUSU", SqlDbType.Char,8);
            queryInd.Parameters.Add("@HOGAR", SqlDbType.TinyInt);
            queryInd.Parameters["@CODUSU"].Value = codusu;
            queryInd.Parameters["@HOGAR"].Value = hogar;
            
            SqlDataAdapter dataAdapter = new SqlDataAdapter(queryInd);
            DataTable tabla = new DataTable();

            return (dataAdapter.Fill(tabla)/IIUno) > 3 ? true : false ;
        }

        public bool CalcularNbiDos(int IvUno)
        {
            return ((IvUno == 1) || (IvUno == 2)) ? true : false;
        }

        public bool CalcularNbiTres(int IvOnce)
        {
            return IvOnce == 3 || IvOnce == 4? true : false;
        }

        public bool CalcularNbiCuatro(int codusu,int hogar)
        {
            String personasPorHogar = "SELECT CH06,CH10 FROM IND WHERE CODUSU=@CODUSU and NRO_HOGAR=@HOGAR";
            SqlCommand queryInd = new SqlCommand(personasPorHogar, ConeccionBD.getInstance().getConneccion());
            queryInd.Parameters.Add("@CODUSU", SqlDbType.Char, 8);
            queryInd.Parameters.Add("@HOGAR", SqlDbType.TinyInt);
            queryInd.Parameters["@CODUSU"].Value = codusu;
            queryInd.Parameters["@HOGAR"].Value = hogar;

            SqlDataAdapter dataAdapter = new SqlDataAdapter(queryInd);
            DataTable tabla = new DataTable();

            dataAdapter.Fill(tabla);

            foreach (DataRow fila in tabla.Rows)
            {
                if (System.Convert.ToInt16(fila["CH10"]) != 1 && System.Convert.ToInt16(fila["CH06"]) >= 6 && System.Convert.ToInt16(fila["CH06"]) <= 12)
                    return true;               
            }
            return false;
        }

        public bool CalcularNbiCinco(int codusu,int hogar)
        {
            int personasOcupadas = 0;
            int personasEnElHogar = 0;
            String personasPorHogar = "SELECT ESTADO,COMPONENTE,CH12,CH13,CH14 FROM IND WHERE CODUSU = @CODUSU AND NRO_HOGAR = @HOGAR";
            SqlCommand queryPersonasHogar = new SqlCommand(personasPorHogar, ConeccionBD.getInstance().getConneccion());      

            queryPersonasHogar.Parameters.Add("@CODUSU", SqlDbType.Char, 8);
            queryPersonasHogar.Parameters.Add("@HOGAR", SqlDbType.TinyInt);            
            queryPersonasHogar.Parameters["@CODUSU"].Value = codusu;
            queryPersonasHogar.Parameters["@HOGAR"].Value = hogar;

            SqlDataAdapter dataAdapter = new SqlDataAdapter(queryPersonasHogar);
            DataTable tabla = new DataTable();
            personasEnElHogar = dataAdapter.Fill(tabla);

            personasOcupadas = this.cantidadDePersonasOcupadas(tabla);
            //TODO:ejorar
            if (personasOcupadas == 0)
            {
                return true;
            }

            return (((personasEnElHogar / personasOcupadas) >= 4) && this.jefeAnalfabeto(tabla)) ? true : false;
        }

        private int cantidadDePersonasOcupadas(DataTable tabla)
        {
            int personasOcupadas = 0;
            foreach (DataRow fila in tabla.Rows)
            {
                if (System.Convert.ToInt16(fila["ESTADO"]) == 1)
                    personasOcupadas++;
            }
            return personasOcupadas;
        }

        private bool jefeAnalfabeto(DataTable tabla){
            foreach(DataRow fila in tabla.Rows){
                if (System.Convert.ToInt16(fila["COMPONENTE"]) == 1)
                {
                   return (System.Convert.ToInt16(fila["CH12"]) <= 3 &&
                        (System.Convert.ToString(fila["CH14"]) == "00" ||
                         System.Convert.ToString(fila["CH14"]) == "01" ||
                         System.Convert.ToString(fila["CH14"]) == "02") &&
                         System.Convert.ToInt16(fila["CH13"]) == 2);
                }
            }
            return false;//nunca va a llegar, salvo que la base tenga mal ingresado los datos
        }
    }
}
